// 因为刷新会清空vuex中的数据 
function setItem(name, item) {
    localStorage.setItem(name, JSON.stringify(item)) //JSON转换item
}
function getItem(name) {
    return JSON.parse(localStorage.getItem(name) || '[]')
}

export default {
    state: {
        // car:[{id:商品id,count：购买的数量,selected:是否选中  },{},{}] 每一个就是我们对应的数据
        car: getItem('car'), //从localStrorage中获取初始数据
        buy: getItem('buy'), //要买的 当我们点击去结算的按钮的时候将我们的这个buy数组里的商品做结算操作 
    },
    mutations: {
        addShopcart(state, goodsinfo) {
            //购物车已经有了 对应的商品 那么商品数量+1 
            // 否则 添加到goodsinfo于购物车中
            let flag = false;  //当flag为false时 表示购物车中没有相同的商品 若为true...
            // 购物车中 是否有goodsinfo 是否有对应的商品 
            state.car.some(item => {
                if (parseInt(item.id) === parseInt(goodsinfo.id)) {
                    item.count += parseInt(goodsinfo.count)
                    flag = true
                    return true;
                }
            })
            if (flag == false) {
                //购物车中没有相同的商品 将这个商品goodsinfo直接保存到购物车里面
                state.car.push(goodsinfo)
            }
            // 调用方法 将数据保存到localStroge
            setItem('car', state.car)
        },
        // 修改商品数量
        updateGoodsInfo(state, goodsinfo) {
            state.car.some(item => {
                if (parseInt(item.id) === parseInt(goodsinfo.id)) {
                    item.count = parseInt(goodsinfo.count)
                    return true
                }
            }) //找到需要更新的数据
            setItem('car', state.car)
        },
        //修改商品的选中状态
        updateGoodsSelected(state, goodsinfo) {
            state.car.some(item => {
                if (parseInt(item.id) === parseInt(goodsinfo.id)) {
                    item.selected = goodsinfo.selected;
                }
            })
            setItem('car', state.car);

        },
        removeShopcart(state, id) {
            state.car.some((item, index) => {
                if (parseInt(item.id) === parseInt(id)) {
                    state.car.splice(index, 1)
                    return true
                }
            })
            setItem('car', state.car)
        },
        // 将购物车中选中的商品添加到buy 数组中
        setBuy(state, goods) {
            // goods 是一个对象 其中封装了 各种属性
            if (goods) {
                // 将我们要购买的那一个商品(goods)加到buy中
                state.buy.push(goods)
            } else {
                // 将购物车的商品添加到buy数组
                state.buy = []
                state.car.forEach(item => {
                    if (item.selected) {
                        state.buy.push(item) //push 不断累加 点一次就累加一次 不符合条件
                    }
                })

            }
            setItem('buy', state.buy)
        }
    },
    actions: {},
    getters: {
        // 获取商品数量
        getGoodsCount(state) {
            var goods = {}
            state.car.forEach(item => {
                goods[item.id] = item.count
            })
            return goods
        },
        // 获取商品有没有选中的状态值（selected）
        getGoodsSelected(state) {
            var goods = {}
            state.car.forEach(item => {
                goods[item.id] = item.selected
            })
            return goods
        },
        // 获取选中的商品的件数
        getSelectedCount(state) {
            var count = 0
            state.car.forEach(item => {
                if (item.selected) {
                    count += item.count
                }
            })
            return count
        },
        // 获取选中的商品
        getSelectedGoods(state) {
            //goods:[ 701:{id:xx,count:2,selected:true}
            var goods = {}
            state.car.forEach(item => {
                if (item.selected) {
                    goods[item.id] = item
                }
            })
            return goods
        },
        // 获取要购买的商品
        getBuy(state) {
            var goods = {}
            state.buy.forEach(item => {
                goods[item.id] = item
            })
            return goods
        }
    },
    namespaced: true  //如果有多个模块 不会造成名字的冲突 访问的时候 带了user.xxxx
}